/*
 * Copyright (C) Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
define(['dojo/_base/declare', 'light/controllers/AbstractLightController',
        'light/enums/EventsEnum', 'light/utils/PubSubUtils',
        'light/enums/BrowseContextsEnum',
        'light/builders/BrowseContextStateBuilder', 'dojo'],
        function(declare, AbstractLightController, EventsEnum,
                 PubSubUtils, BrowseContextsEnum,
                 BrowseContextStateBuilder, dojo) {

  return declare('light.controller.ActivityIndicatorController',
          AbstractLightController, {
    /** @lends light.controller.ActivityIndicatorController# */

    /**
     * @extends light.controllers.AbstractLightController
     * @constructs
     */
    constructor: function() {
      if(!dojo.config.ioPublish) {
        throw new Error('dojo.config.ioPublish should be truthy');
      }
    },

    /**
     * Wire's this object to the dojo event system.
     */
    watch: function() {
      PubSubUtils.subscribe('/dojo/io/send', this,
              this._onIOSend);
      PubSubUtils.subscribe('/dojo/io/stop', this,
              this._onIOStop);
    },

    _onIOSend: function(browseContextState, source) {
      this._view.show();
    },

    _onIOStop: function(browseContextState, source) {
      this._view.hide();
    }
  });
});
